﻿#define _CRT_SECURE_NO_WARNINGS 1
#include"ListNode.h"

////双向链表的打印
//void LTPrint(LTNode* phead)
//{ 
//	LTNode* pcur = phead->next;
//	while (pcur != phead)
//	{
//		printf("%d->",pcur->date );
//		pcur = pcur->next;
//	}
//	printf("\n");
//}
//
//
////申请一个节点
//LTNode* LTBuyNode(replace x)
//{
//	LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));
//	if (newnode == NULL)
//	{
//		perror("malloc");
//		exit(1);
//	}
//	newnode->date = x;
//	newnode->next = newnode->prev = newnode;
//	return newnode;
//}
//
////双链表的初始化
//void LTInit(LTNode** pphead)
//{
//	//给双向链表创建一个哨兵位
//	*pphead = LTBuyNode(-1);
//
//}
//
////双链表的初始化
//LTNode* LTInit2( )
//{
//	LTNode* phead = LTBuyNode(-1);
//	return phead;
//}
//
//
////双链表的尾插
//void LTPushBack(LTNode* phead, replace x)
//{
//	assert(phead);//哨兵位不能为空，哨兵位为空就说明该双链表不是一个有效的双链表
//	LTNode* newnode = LTBuyNode(x);
//
//	newnode->next = phead;
//	newnode->prev = phead->prev;
//
//    phead->prev->next = newnode;
//	phead->prev = newnode;
//	
//}
//
////顺序表的头插
//void LTPushFront(LTNode* phead, replace x)
//{
//	assert(phead);
//	LTNode* newnode = LTBuyNode(x);
//	//phead newnode phead->next
//	newnode->next = phead->next;
//	newnode->prev = phead;
//
//	phead->next->prev = newnode;
//	phead->next = newnode;
//}
//
//
////双链表的尾删
//void LTPopBack(LTNode* phead)
//{
//	assert(phead && phead->next !=phead);
//
//	LTNode* del = phead->prev;
//
//	del->prev -> next= phead;
//	phead->prev = del->prev;
//
//	free(del);
//	del = NULL;
//}
//
//
//
////双链表的头删
//void LTPopFront(LTNode* phead)
//{
//	assert(phead && phead->next!=phead);//哨兵位必须存在 双链表不能为空
//
//	LTNode* del = phead->next;
//
//	phead->next = del->next;
//	del->next->prev = phead;
//	free(del);
//	del = NULL;
//
//}
//
//
////查找
//LTNode* LTFind(LTNode* phead, replace x)
//{
//	LTNode* pcur = phead->next;
//	while (pcur != phead)
//	{
//		if (pcur->date == x)
//		{
//			return pcur;
//		}
//		pcur = pcur->next;
//	}
//
//	return NULL;
//}
//
//
//
////在pos位置之后插⼊数据
//void LTInsert(LTNode* pos, replace x)
//{
//	assert(pos);
//
//	LTNode* newnode = LTBuyNode(x);
//
//	newnode->next = pos->next;
//	newnode->prev = pos;
//
//	pos->next->prev = newnode;
//	pos->next = newnode;
//}
//
//
//
////删除pos指针 得传二级指针  在调用这个函数的时候，释放了当前的实参pos指向的节点，但是没有将pos置空，pos就成了野指针了，
//void LTErase(LTNode* pos)
//{
//	//pos不能等于phead，但是没有参数，没法进行校验
//	assert(pos);
//	//pos->prev pos pos->next
//	pos->prev->next = pos->next;
//	pos->next->prev = pos->prev;
//	free(pos);
//	pos = NULL;
//}
//
//void ListDestory(LTNode* plist)
//{
//	assert(plist);
//
//	LTNode* cur = plist->next;
//	while (cur != plist)
//	{
//		LTNode* next = cur->next;
//		free(cur);
//		cur = next;
//	}
//
//	free(plist);
//	//phead = NULL;
//}

